{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "intro",
   "metadata": {},
   "source": [
    "# Introducción a las colecciones en Python"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "concepto",
   "metadata": {},
   "source": [
    "## Paso 1: ¿Qué son las colecciones?\n",
    "En Python, las colecciones permiten almacenar múltiples valores en una sola variable. Son útiles cuando se necesita gestionar más de un dato a la vez. Existen diferentes tipos de colecciones, cada una con una función distinta."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "tipos-lista",
   "metadata": {},
   "source": [
    "Python ofrece varios tipos de colecciones integradas:\n",
    "- **Listas** (`list`): Colecciones ordenadas y mutables. Se pueden modificar después de su creación.\n",
    "- **Tuplas** (`tuple`): Colecciones ordenadas, pero inmutables. Una vez creadas, no se pueden modificar sus elementos.\n",
    "- **Conjuntos** (`set`): Colecciones desordenadas que no pueden tener valores duplicados.\n",
    "- **Diccionarios** (`dict`): Almacenan datos en pares clave-valor, lo que facilita la recuperación de información basada en una clave."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "list",
   "metadata": {},
   "source": [
    "## Paso 2: Listas\n",
    "Una lista es una colección ordenada (el orden de los elementos se conserva) y mutable (se puede cambiar su contenido). Se pueden añadir, eliminar o modificar elementos de una lista.\n",
    "Aquí hay un ejemplo donde creamos una lista de frutas y realizamos algunas operaciones con ella:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-list",
   "metadata": {},
   "outputs": [],
   "source": [
    "fruits = ['apple', 'banana', 'cherry']\n",
    "# Access the first item in the list\n",
    "print(fruits[0])  # Output: apple\n",
    "# Add a new item to the list\n",
    "fruits.append('orange')\n",
    "# Now the list is updated\n",
    "print(fruits)  # Output: ['apple', 'banana', 'cherry', 'orange']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "tuple",
   "metadata": {},
   "source": [
    "## Paso 3: Tuplas\n",
    "Una tupla es como una lista, pero es **inmutable**. Una vez creada, no se puede modificar su contenido. Esto resulta útil para almacenar datos que no deben modificarse.\n",
    "En este ejemplo, definimos una tupla y accedemos a sus elementos:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-tuple",
   "metadata": {},
   "outputs": [],
   "source": [
    "coordinates = (10, 20)\n",
    "# Access the second element in the tuple\n",
    "print(coordinates[1])  # Output: 20"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "set",
   "metadata": {},
   "source": [
    "## Paso 4: Conjuntos\n",
    "Un conjunto es una colección desordenada de elementos únicos. Los conjuntos no admiten valores duplicados, por lo que si intenta agregar el mismo elemento dos veces, solo aparecerá una vez.\n",
    "En el siguiente ejemplo, definimos un conjunto y observamos cómo se eliminan automáticamente los duplicados:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-set",
   "metadata": {},
   "outputs": [],
   "source": [
    "unique_numbers = {1, 2, 3, 3, 4}\n",
    "# Duplicates are automatically removed when we create the set\n",
    "print(unique_numbers)  # Output: {1, 2, 3, 4}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dict",
   "metadata": {},
   "source": [
    "## Paso 5: Diccionarios\n",
    "Los diccionarios son conjuntos de pares clave-valor. Cada elemento de un diccionario tiene una clave y un valor asociado. Se utilizan cuando se necesita almacenar datos y recuperarlos rápidamente mediante la clave.\n",
    "En el siguiente ejemplo, definimos un diccionario para almacenar el nombre y la edad de una persona:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "codigo-dict",
   "metadata": {},
   "outputs": [],
   "source": [
    "person = {'name': 'Alice', 'age': 25}\n",
    "# Access the value associated with the 'name' key\n",
    "print(person['name'])  # Output: Alice"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio",
   "metadata": {},
   "source": [
    "## Paso 6: Ejercicio práctico\n",
    "Ahora, practiquemos lo aprendido. Crea un programa que te pida tres de tus frutas favoritas, las guarde en una lista y luego la imprima."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio-2",
   "metadata": {},
   "source": [
    "### Ejercicio 1: Invertir una lista\n",
    "Escribe un programa que cree una lista de tus números favoritos e invierta su orden.\n",
    "Consejo: Usa el método `reverse()` para invertir la lista en su lugar."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio-3",
   "metadata": {},
   "source": [
    "### Ejercicio 2: Operaciones con tuplas\n",
    "Escribe un programa que cree una tupla con algunos elementos e imprima el segundo elemento.\n",
    "Consejo: Recuerda que la indexación empieza en 0, por lo que el segundo elemento tiene índice 1."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ejercicio-4",
   "metadata": {},
   "source": [
    "### Ejercicio 3: Operaciones con conjuntos\n",
    "Crea un conjunto con varios números, añade un nuevo número al conjunto e imprime el conjunto antes y después de añadir el nuevo número."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.x"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
